const express = require('express')
const router = express.Router()
const path = require('path')
const fs = require('fs').promises
const rds = require('../tmall-db/rds')

// 读取 JSON 数据文件
const loadDiseasesData = async () => {
    try {
        const filePath = path.join(__dirname, '../data/diseases.json')
        const data = await fs.readFile(filePath, 'utf8')
        return JSON.parse(data)
    } catch (err) {
        console.error('读取解决方案数据失败:', err)
        return { categories: [], products: [], articles: [] }
    }
}

// 获取所有疾病分类
router.get('/diseases/categories', async (req, res) => {
    try {
        const data = await loadDiseasesData()
        const categories = data.categories.sort((a, b) => a.sort_order - b.sort_order)
        res.json({ code: 0, data: categories })
    } catch (err) {
        console.error('获取疾病分类失败:', err)
        res.json({ code: -1, message: '获取疾病分类失败' })
    }
})

// 从数据库获取产品数据
const loadProductsData = async () => {
    try {
        const [products] = await rds.query('SELECT * FROM mta_products')

        // 处理 JSON 字段
        return products.map(product => ({
            ...product,
            tags: JSON.parse(product.tags),
            refs: JSON.parse(product.refs)
        }))
    } catch (err) {
        console.error('从数据库读取产品数据失败:', err)
        return []
    }
}

// 获取产品列表
router.get('/products', async (req, res) => {
    try {
        const products = await loadProductsData()
        let filteredProducts = [...products]

        // 处理标签筛选
        if (req.query.tags) {
            const tags = decodeURIComponent(req.query.tags).split(',')
            filteredProducts = filteredProducts.filter(product => {
                return tags.every(tag => product.tags.includes(tag))
            })
        }

        // 按排序字段排序
        filteredProducts = filteredProducts.sort((a, b) => a.sort_order - b.sort_order)
        res.json({ code: 0, data: filteredProducts })
    } catch (err) {
        console.error('获取产品数据失败:', err)
        res.json({ code: -1, message: '获取产品数据失败' })
    }
})

// 读取 JSON 数据文件
const loadPostsData = async () => {
    try {
        const filePath = path.join(__dirname, '../data/posts.json')
        const data = await fs.readFile(filePath, 'utf8')
        return JSON.parse(data)
    } catch (err) {
        console.error('读取解决方案数据失败:', err)
        return { categories: [], posts: [], articles: [] }
    }
}

// 获取产品分类
router.get('/posts', async (req, res) => {
    try {
        const data = await loadPostsData()
        let posts = data.posts

        // 处理标签筛选
        if (req.query.tags) {
            const tags = decodeURIComponent(req.query.tags).split(',')
            posts = posts.filter(post => {
                return tags.every(tag => post.tags.includes(tag))
            })
        }

        // 按排序字段排序
        posts = posts.sort((a, b) => a.sort_order - b.sort_order)
        res.json({ code: 0, data: posts })
    } catch (err) {
        console.error('获取产品数据失败:', err)
        res.json({ code: -1, message: '获取产品数据失败' })
    }
})

// 获取客服中心数据（从数据库）
router.get('/helpdesk/:mer_code', async (req, res) => {
    try {
        const merCode = req.params.mer_code;

        // 获取客服中心数据
        const [[helpdesk]] = await rds.query(
            'SELECT content FROM mta_helpdesks WHERE mer_code = ?',
            [merCode]
        );

        if (!helpdesk) {
            return res.json({ code: -1, message: '未找到该商户的客服数据' });
        }

        // 解析JSON数据
        const data = JSON.parse(helpdesk.content);
        res.json({ code: 0, data });
    } catch (err) {
        console.error('获取客服数据失败:', err);
        res.json({ code: -1, message: '获取客服数据失败' });
    }
});

// 获取客服中心数据（从JSON文件，备份路由）
router.get('/helpdesk-json/:mer_code', async (req, res) => {
    try {
        const merCode = req.params.mer_code;

        // 读取 JSON 数据文件
        const filePath = path.join(__dirname, '../data/helpdesks.json');
        const data = await fs.readFile(filePath, 'utf8');
        const helpdesks = JSON.parse(data);

        // 获取指定商户的数据
        const helpdesk = helpdesks[merCode];
        if (!helpdesk) {
            return res.json({ code: -1, message: '未找到该商户的客服数据' });
        }

        res.json({ code: 0, data: helpdesk });
    } catch (err) {
        console.error('获取客服数据失败:', err);
        res.json({ code: -1, message: '获取客服数据失败' });
    }
});

module.exports = router
